#!/bin/bash

# 设置命名空间
NAMESPACE="kube-system"

#nginx版本
NGINXVERSION="1.13.10"

# 创建 Deployment
DEPLOYMENT_NAME="service-availability-detection"

# 确保 Deployment 不存在
kubectl delete deployment $DEPLOYMENT_NAME -n $NAMESPACE --ignore-not-found=true

# 创建 Deployment YAML
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: $DEPLOYMENT_NAME
  namespace: $NAMESPACE
spec:
  replicas: 0  # 初始设置为0，稍后动态调整
  selector:
    matchLabels:
      app: $DEPLOYMENT_NAME
  template:
    metadata:
      labels:
        app: $DEPLOYMENT_NAME
    spec:
      containers:
      - name: service-availability-detection
        image: hub.paas/base/nginx:$NGINXVERSION
        ports:
        - containerPort: 80  # 假设应用监听在80端口
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5
      tolerations:
      - operator: Exists  # 允许在所有节点上调度
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - $DEPLOYMENT_NAME
            topologyKey: "kubernetes.io/hostname"
EOF

# 获取集群节点数量
NODE_COUNT=$(kubectl get nodes -o jsonpath='{.items[*].metadata.name}' | wc -w)

# 动态调整副本数为节点数量
kubectl scale deployment $DEPLOYMENT_NAME -n $NAMESPACE --replicas=$NODE_COUNT

# 等待 Deployment 完成调度
sleep 10

# 获取所有 Pod 的 IP 和端口
POD_IPS=$(kubectl get pods -n $NAMESPACE -l app=$DEPLOYMENT_NAME -o jsonpath='{.items[*].status.podIP}')
CONTAINER_PORT=80  # 假设应用监听在80端口

if [ -z "$POD_IPS" ]; then
    echo "未找到任何 Pod"
    exit 1
fi

# 遍历所有 Pod 的 IP 和端口，使用 curl 检查接口
for POD_IP in $POD_IPS; do
    echo "检查 Pod IP $POD_IP 的端口 $CONTAINER_PORT ..."
    
    # 使用 kubectl exec 在一个 Pod 中执行 curl 命令检查其他 Pod
    # 选择一个 Pod 来执行 curl
    POD_NAME=$(kubectl get pods -n $NAMESPACE -l app=$DEPLOYMENT_NAME -o jsonpath='{.items[0].metadata.name}')
    
    # 使用 curl 检查接口
    if kubectl exec -it $POD_NAME -n $NAMESPACE -- curl -s --connect-timeout 2 http://$POD_IP:$CONTAINER_PORT/ >/dev/null 2>&1; then
        echo "Pod IP $POD_IP 的端口 $CONTAINER_PORT /接口 访问成功"
    else
        echo "Pod IP $POD_IP 的端口 $CONTAINER_PORT /接口 访问失败"
    fi
done
